νλ‘νμΌλ§, λ³λͺ© νμ μλ³, κΈλ‘λ² μΉ μ ν리μΌμ΄μ μ μν ν¨κ³Όμ μΈ κ°μ κΈ°λ² μ μ©μ ν¬ν¨ν μλ°μ€ν¬λ¦½νΈ μ±λ₯ μ΅μ νλ₯Ό μν 체κ³μ μΈ λ°©λ²λ‘ μ νμν©λλ€.
μλ°μ€ν¬λ¦½νΈ μ±λ₯ μ΅μ ν λ°©λ²λ‘ : 체κ³μ μΈ κ°μ μ κ·Όλ²
λΉ λ₯΄κ² λ³ννλ μ€λλ μ λμ§νΈ νκ²½μμ μ¬μ©μ κ²½νμ 무μλ³΄λ€ μ€μν©λλ€. λ리거λ λ°μμ΄ μλ μΉ μ ν리μΌμ΄μ μ μ¬μ©μμ λΆλ§κ³Ό μ΄νλ‘ μ΄μ΄μ§ μ μμ΅λλ€. νλ‘ νΈμλ κ°λ°μ μ§λ°°μ μΈ μΈμ΄μΈ μλ°μ€ν¬λ¦½νΈλ μ’ μ’ μΉμ¬μ΄νΈ μ±λ₯μ κ²°μ μ μΈ μν μ ν©λλ€. μ΄ κΈμμλ μλ°μ€ν¬λ¦½νΈ μ±λ₯μ μ΅μ ννκΈ° μν 체κ³μ μΈ λ°©λ²λ‘ μ μ€λͺ νμ¬, μ¬λ¬λΆμ μ ν리μΌμ΄μ μ΄ λΉ λ₯΄κ³ ν¨μ¨μ μ΄λ©° μ μΈκ³ μ¬μ©μμκ² μ°μν μ¬μ©μ κ²½νμ μ 곡νλλ‘ λ³΄μ₯ν©λλ€.
1. μλ°μ€ν¬λ¦½νΈ μ±λ₯ μ΅μ νμ μ€μμ± μ΄ν΄νκΈ°
μλ°μ€ν¬λ¦½νΈ μ±λ₯ μ΅μ νλ λ¨μν μΉμ¬μ΄νΈ λ‘λ© μλλ₯Ό λμ΄λ κ² μ΄μμ λλ€. μ΄λ λΆλλ½κ³ λ°μμ±μ΄ μ’μ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λ€κ³ , 리μμ€ μλΉλ₯Ό μ€μ΄λ©°, μ λ°μ μΈ μΉμ¬μ΄νΈ μ μ§λ³΄μμ±μ ν₯μμν€λ κ²μ κ΄ν κ²μ λλ€. λ€μκ³Ό κ°μ ν΅μ¬μ μΈ μΈ‘λ©΄μ κ³ λ €ν΄ λ³΄μΈμ:
- μ¬μ©μ κ²½ν(UX): λ λΉ λ₯Έ λ‘λ© μκ°κ³Ό λΆλλ¬μ΄ μνΈμμ©μ μ¬μ©μμ λ§μ‘±λλ₯Ό λμ΄κ³ μ°Έμ¬λ₯Ό μ¦μ§μν΅λλ€. μλ₯Ό λ€μ΄, μλ°μ€ν¬λ¦½νΈ μ±λ₯μ΄ μ΅μ νλ μ μμκ±°λ μ¬μ΄νΈλ λλ¦° κ²°μ κ³Όμ μΌλ‘ μΈν μ₯λ°κ΅¬λ μ΄νλ₯ μ΄ μ€μ΄λ€ κ²μ λλ€.
- κ²μ μμ§ μ΅μ ν(SEO): ꡬκΈκ³Ό κ°μ κ²μ μμ§μ μΉμ¬μ΄νΈ μλλ₯Ό μμ κ²°μ μμΈμΌλ‘ κ³ λ €ν©λλ€. μ΅μ νλ μΉμ¬μ΄νΈλ κ²μ κ²°κ³Όμμ λ λμ μμλ₯Ό μ°¨μ§ν©λλ€.
- 리μμ€ μλΉ: ν¨μ¨μ μΈ μλ°μ€ν¬λ¦½νΈ μ½λλ CPUμ λ©λͺ¨λ¦¬λ₯Ό λ μλΉνμ¬ μλ² λΉμ©μ μ κ°νκ³ λͺ¨λ°μΌ κΈ°κΈ°μ λ°°ν°λ¦¬ μλͺ μ ν₯μμν΅λλ€. μ΄λ νΉν λμνμ΄ μ νμ μ΄κ±°λ ꡬν κΈ°κΈ°λ₯Ό μ¬μ©νλ μ§μμ μ¬μ©μμκ² μ€μν©λλ€.
- μ μ§λ³΄μμ±: μ μ΅μ νλ μ½λλ μ’ μ’ λ κΉ¨λνκ³ κ°λ μ±μ΄ μ’μΌλ©° μ μ§λ³΄μκ° μ¬μ μ₯κΈ°μ μΌλ‘ κ°λ° λΉμ©μ μ κ°ν©λλ€.
2. 체κ³μ μΈ μ΅μ ν λ°©λ²λ‘
ν¨κ³Όμ μΈ μλ°μ€ν¬λ¦½νΈ μ±λ₯ μ΅μ νλ₯Ό μν΄μλ ꡬ쑰νλ μ κ·Ό λ°©μμ΄ νμμ μ λλ€. μ΄ λ°©λ²λ‘ μ λͺ κ°μ§ μ£Όμ λ¨κ³λ‘ ꡬμ±λ©λλ€:
2.1. μ±λ₯ λͺ©ν λ° μ§ν μ μ
μ΅μ νλ₯Ό μμνκΈ° μ μ λͺ νν μ±λ₯ λͺ©νμ μ§νλ₯Ό μ μνλ κ²μ΄ μ€μν©λλ€. μ΄λ¬ν λͺ©νλ μΈ‘μ κ°λ₯ν΄μΌ νλ©° λΉμ¦λμ€ λͺ©νμ μΌμΉν΄μΌ ν©λλ€. μΌλ°μ μΈ μ§νλ λ€μκ³Ό κ°μ΅λλ€:
- νμ΄μ§ λ‘λ μκ°: λͺ¨λ 리μμ€(μ: μ΄λ―Έμ§, μ€ν¬λ¦½νΈ, μ€νμΌμνΈ)λ₯Ό ν¬ν¨νμ¬ νμ΄μ§κ° μμ ν λ‘λλλ λ° κ±Έλ¦¬λ μκ°μ λλ€. 3μ΄ λ―Έλ§μ΄ μ’μ λͺ©νμ λλ€.
- μ΅μ΄ λ°μ΄νΈ μμ μκ°(TTFB): λΈλΌμ°μ κ° μλ²λ‘λΆν° 첫 λ²μ§Έ λ°μ΄ν° λ°μ΄νΈλ₯Ό μμ νλ λ° κ±Έλ¦¬λ μκ°μ λλ€. μ΄λ μλ²μ μλ΅μ±μ λνλ λλ€.
- 첫 μ½ν μΈ νμΈνΈ(FCP): 첫 λ²μ§Έ μ½ν μΈ (μ: ν μ€νΈ, μ΄λ―Έμ§)κ° νλ©΄μ λνλλ λ° κ±Έλ¦¬λ μκ°μ λλ€. μ΄λ μ¬μ©μμκ² νμ΄μ§κ° λ‘λλκ³ μλ€λ μ΄κΈ° μ νΈλ₯Ό μ€λλ€.
- μ΅λ μ½ν μΈ νμΈνΈ(LCP): κ°μ₯ ν° μ½ν μΈ μμ(μ: ν° μ΄λ―Έμ§, λΉλμ€)κ° λ³΄μ΄κ² λλ λ° κ±Έλ¦¬λ μκ°μ λλ€. μ΄λ μ²΄κ° μ±λ₯μ ν΅μ¬ μ§νμ λλ€.
- μνΈμμ© κ°λ₯ μκ°(TTI): νμ΄μ§κ° μμ ν μνΈμμ© κ°λ₯ν΄μ Έ μ¬μ©μκ° μμμ μνΈμμ©ν μ μκ² λκΈ°κΉμ§ 걸리λ μκ°μ λλ€.
- μ΄ μ°¨λ¨ μκ°(TBT): λ©μΈ μ€λ λκ° μ°¨λ¨λμ΄ μ¬μ©μ μ λ ₯μ λ§λ μ΄ μκ°μ λλ€. TBTλ₯Ό μ€μ΄λ©΄ λ°μμ±μ΄ ν₯μλ©λλ€.
- μ΄λΉ νλ μ μ(FPS): μ λλ©μ΄μ κ³Ό νΈλμ§μ μ΄ μΌλ§λ λΆλλ½κ² λ λλ§λλμ§λ₯Ό λνλ΄λ μ²λμ λλ€. 60 FPSλ₯Ό λͺ©νλ‘ νλ©΄ μ μ°ν μ¬μ©μ κ²½νμ μ 곡ν©λλ€.
Google PageSpeed Insights, WebPageTest, Lighthouseμ κ°μ λꡬλ μ΄λ¬ν μ§νλ₯Ό μΈ‘μ νκ³ κ°μ μμμ μλ³νλ λ° λμμ μ€ μ μμ΅λλ€. μ μΈκ³ μ¬μ©μ κΈ°λ°μ μ±λ₯μ μ΄ν΄νκΈ° μν΄ μ¬λ¬ μ§λ¦¬μ μμΉμμ ν μ€νΈν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, λ―Έκ΅μ νΈμ€ν λ μΉμ¬μ΄νΈλ νΈμ£Ό μ¬μ©μμκ²λ μ±λ₯μ΄ μ νλ μ μμ΅λλ€. μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN)λ₯Ό μ¬μ©νμ¬ μ½ν μΈ λ₯Ό μ¬μ©μμ λ κ°κΉμ΄ κ³³μ λ°°ν¬νλ κ²μ κ³ λ €νμμμ€.
2.2. νλ‘νμΌλ§ λ° λ³λͺ© νμ μλ³
μ±λ₯ λͺ©νλ₯Ό μ μνλ€λ©΄, λ€μ λ¨κ³λ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό νλ‘νμΌλ§νμ¬ μ±λ₯ λ³λͺ© νμμ μλ³νλ κ²μ λλ€. νλ‘νμΌλ§μ μ½λμ μ¬λ¬ λΆλΆμ μ€ν μκ°μ λΆμνμ¬ κ°μ₯ λ§μ 리μμ€λ₯Ό μλΉνλ μμμ μ°Ύμλ΄λ κ³Όμ μ λλ€.
λΈλΌμ°μ κ°λ°μ λꡬ: μ΅μ λΈλΌμ°μ λ λ΄μ₯ νλ‘νμΌλ¬λ₯Ό ν¬ν¨ν κ°λ ₯ν κ°λ°μ λꡬλ₯Ό μ 곡ν©λλ€. μ΄λ¬ν λꡬλ₯Ό μ¬μ©νλ©΄ μλ°μ€ν¬λ¦½νΈ μ½λμ μ±λ₯μ κΈ°λ‘νκ³ λΆμν μ μμ΅λλ€. μλ₯Ό λ€μ΄, Chrome DevToolsμ Performance ν¨λμ CPU μ¬μ©λ, λ©λͺ¨λ¦¬ ν λΉ, λ λλ§ μ±λ₯μ λν μμΈν μ 보λ₯Ό μ 곡ν©λλ€.
μ£Όμ νλ‘νμΌλ§ κΈ°λ²:
- CPU νλ‘νμΌλ§: κ°μ₯ λ§μ CPU μκ°μ μλΉνλ ν¨μλ₯Ό μλ³ν©λλ€. μ€ν μκ°μ΄ κΈ΄ ν¨μ, λΉν¨μ¨μ μΈ μκ³ λ¦¬μ¦, λΆνμν κ³μ°μ μ°Ύμ보μΈμ.
- λ©λͺ¨λ¦¬ νλ‘νμΌλ§: λ©λͺ¨λ¦¬ λμμ κ³Όλν λ©λͺ¨λ¦¬ ν λΉμ κ°μ§ν©λλ€. λ©λͺ¨λ¦¬ λμλ μκ°μ΄ μ§λ¨μ λ°λΌ μ±λ₯ μ νλ₯Ό μΌμΌν€κ³ κ²°κ΅ μΆ©λμ μ λ°ν μ μμ΅λλ€.
- νμλΌμΈ νλ‘νμΌλ§: λ λλ§, νμΈν , μ€ν¬λ¦½ν μ ν¬ν¨νμ¬ μλ°μ€ν¬λ¦½νΈ μ½λ μ€ν μ€μ λ°μνλ μ΄λ²€νΈλ₯Ό μκ°μ μΌλ‘ 보μ¬μ€λλ€. μ΄λ λ λλ§ λ° λ μ΄μμκ³Ό κ΄λ ¨λ λ³λͺ© νμμ μλ³νλ λ° λμμ΄ λ μ μμ΅λλ€.
μμ: λ°μ΄ν° μκ°ν λμ보λλ₯Ό ꡬμΆνλ€κ³ μμν΄ λ³΄μΈμ. νλ‘νμΌλ§ κ²°κ³Ό, 볡μ‘ν μ°¨νΈλ₯Ό λ λλ§νλ ν¨μκ° κ³Όλν μκ°μ μμνλ κ²μΌλ‘ λνλ¬μ΅λλ€. μ΄λ μ°¨νΈ λ λλ§ μκ³ λ¦¬μ¦ μ΅μ νκ° νμν¨μ λνλ λλ€.
2.3. μ΅μ ν κΈ°λ²
μ±λ₯ λ³λͺ© νμμ μλ³ν ν, λ€μ λ¨κ³λ μ μ ν μ΅μ ν κΈ°λ²μ μ μ©νλ κ²μ λλ€. μλ§μ κΈ°λ²μ΄ μμΌλ©°, κ° κΈ°λ²μ κ³ μ ν μ₯λ¨μ μ κ°μ§κ³ μμ΅λλ€. μ΅μμ μ κ·Ό λ°©μμ μ½λμ νΉμ νΉμ±κ³Ό μλ³λ λ³λͺ© νμμ λ°λΌ λ¬λΌμ§λλ€.
2.3.1. μ½λ μ΅μ ν
μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ΅μ ννλ κ²μ ν¨μ¨μ±μ ν₯μμν€κ³ 리μμ€ μλΉλ₯Ό μ€μ΄λ κ²μ ν¬ν¨ν©λλ€. μ¬κΈ°μλ λ€μμ΄ ν¬ν¨λ μ μμ΅λλ€:
- μκ³ λ¦¬μ¦ μ΅μ ν: λ ν¨μ¨μ μΈ μκ³ λ¦¬μ¦κ³Ό λ°μ΄ν° ꡬ쑰λ₯Ό μ νν©λλ€. μλ₯Ό λ€μ΄, μ‘°νλ₯Ό μν΄ λ°°μ΄ λμ ν΄μ ν μ΄λΈμ μ¬μ©νλ©΄ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
- 루ν μ΅μ ν: 루νμ λ°λ³΅ νμλ₯Ό μ€μ΄κ³ κ° λ°λ³΅μμ μνλλ μμ λμ μ΅μνν©λλ€. 루ν μΈλ‘€λ§(loop unrolling)μ΄λ λ©λͺ¨μ΄μ μ΄μ (memoization)κ³Ό κ°μ κΈ°λ²μ κ³ λ €ν΄ λ³΄μΈμ.
- ν¨μ μ΅μ ν: λΆνμν ν¨μ νΈμΆμ νΌνκ³ ν¨μ λ΄μμ μ€νλλ μ½λμ μμ μ΅μνν©λλ€. μΈλΌμΈ ν¨μλ ν¨μ νΈμΆ μ€λ²ν€λλ₯Ό μ€μ¬ λλλ‘ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- λ¬Έμμ΄ μ°κ²°: ν¨μ¨μ μΈ λ¬Έμμ΄ μ°κ²° κΈ°λ²μ μ¬μ©ν©λλ€. `+` μ°μ°μλ₯Ό λ°λ³΅μ μΌλ‘ μ¬μ©νλ κ²μ νΌνμΈμ. λΆνμν μμ λ¬Έμμ΄μ μμ±ν μ μμ΅λλ€. λμ ν νλ¦Ώ 리ν°λ΄μ΄λ λ°°μ΄ μ‘°μΈμ μ¬μ©νμΈμ.
- DOM μ‘°μ: λΉμ©μ΄ λ§μ΄ λ€ μ μλ DOM μ‘°μ μμ μ μ΅μνν©λλ€. DOM μ λ°μ΄νΈλ₯Ό μΌκ΄ μ²λ¦¬νκ³ λ¬Έμ μ‘°κ°(document fragments)κ³Ό κ°μ κΈ°λ²μ μ¬μ©νμ¬ λ¦¬νλ‘μ°(reflow) λ° λ¦¬νμΈνΈ(repaint) νμλ₯Ό μ€μ λλ€.
μμ: λ€λ₯Έ μμ μ μννκΈ° μν΄ λ°°μ΄μ μ¬λ¬ λ² λ°λ³΅νλ λμ , μ΄λ¬ν μμ μ λ¨μΌ 루νλ‘ κ²°ν©ν΄ 보μΈμ.
2.3.2. λ©λͺ¨λ¦¬ κ΄λ¦¬
μ μ ν λ©λͺ¨λ¦¬ κ΄λ¦¬λ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νκ³ μλ°μ€ν¬λ¦½νΈ μ½λκ° ν¨μ¨μ μΌλ‘ μ€νλλλ‘ νλ λ° μ€μν©λλ€. μ£Όμ κΈ°λ²μ λ€μκ³Ό κ°μ΅λλ€:
- μ μ λ³μ νΌνκΈ°: μ μ λ³μλ λ©λͺ¨λ¦¬ λμμ μ΄λ¦ μΆ©λμ μ λ°ν μ μμ΅λλ€. κ°λ₯νλ©΄ μ§μ λ³μλ₯Ό μ¬μ©νμΈμ.
- μ¬μ©νμ§ μλ κ°μ²΄ ν΄μ : λ μ΄μ νμνμ§ μμ λ³μλ λͺ μμ μΌλ‘ `null`λ‘ μ€μ νμ¬ κ΄λ ¨ λ©λͺ¨λ¦¬λ₯Ό ν΄μ ν©λλ€.
- μ½ν μ°Έμ‘° μ¬μ©: μ½ν μ°Έμ‘°(Weak references)λ₯Ό μ¬μ©νλ©΄ κ°μ²΄κ° κ°λΉμ§ 컬λ μ λλ κ²μ λ§μ§ μμΌλ©΄μ κ°μ²΄μ λν μ°Έμ‘°λ₯Ό μ μ§ν μ μμ΅λλ€. μ΄λ μΊμ±μ΄λ μ΄λ²€νΈ 리μ€λ κ΄λ¦¬μ μ μ©ν μ μμ΅λλ€.
- ν΄λ‘μ νΌνκΈ°: ν΄λ‘μ λ μλμΉ μκ² λ³μμ λν μ°Έμ‘°λ₯Ό μ μ§νμ¬ κ°λΉμ§ 컬λ μ λλ κ²μ λ§μ μ μμ΅λλ€. ν΄λ‘μ λ΄ λ³μμ λ²μμ μ μνμΈμ.
μμ: κ΄λ ¨ DOM μμκ° μ κ±°λ λ μ΄λ²€νΈ 리μ€λλ₯Ό λΆλ¦¬νμ¬ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νμΈμ.
2.3.3. λ λλ§ μ΅μ ν
λ λλ§ μ±λ₯ μ΅μ νλ λΈλΌμ°μ κ° DOMμ μ λ°μ΄νΈν λ λ°μνλ 리νλ‘μ°μ 리νμΈνΈ νμλ₯Ό μ€μ΄λ κ²μ ν¬ν¨ν©λλ€. μ£Όμ κΈ°λ²μ λ€μκ³Ό κ°μ΅λλ€:
- DOM μ λ°μ΄νΈ μΌκ΄ μ²λ¦¬: μ¬λ¬ DOM μ λ°μ΄νΈλ₯Ό ν¨κ» κ·Έλ£Ήννκ³ ν λ²μ μ μ©νμ¬ λ¦¬νλ‘μ° λ° λ¦¬νμΈνΈ νμλ₯Ό μ€μ λλ€.
- CSS λ³ν μ¬μ©: μ λλ©μ΄μ μ μννκΈ° μν΄ λ μ΄μμ μμ±(μ: `top`, `left`, `width`, `height`)μ μμ νλ λμ CSS λ³ν(μ: `translate`, `rotate`, `scale`)μ μ¬μ©ν©λλ€. λ³νμ μΌλ°μ μΌλ‘ GPUμμ μ²λ¦¬λλ―λ‘ λ ν¨μ¨μ μ λλ€.
- λ μ΄μμ μ€λμ±(Layout Thrashing) νΌνκΈ°: λμΌν νλ μμμ DOMμ μ½κ³ μ°λ κ²μ νΌνμΈμ. μ΄λ λΈλΌμ°μ κ° μ¬λ¬ λ²μ 리νλ‘μ°μ 리νμΈνΈλ₯Ό μννλλ‘ κ°μ ν μ μμ΅λλ€.
- `will-change` μμ± μ¬μ©: `will-change` μμ±μ μμκ° κ³§ μ λλ©μ΄μ λ κ²μμ λΈλΌμ°μ μ μλ € 미리 λ λλ§μ μ΅μ νν μ μλλ‘ ν©λλ€.
- λλ°μ΄μ±(Debouncing) λ° μ€λ‘νλ§(Throttling): DOM μ λ°μ΄νΈλ₯Ό νΈλ¦¬κ±°νλ μ΄λ²€νΈ νΈλ€λ¬μ λΉλλ₯Ό μ ννκΈ° μν΄ λλ°μ΄μ± λ° μ€λ‘νλ§ κΈ°λ²μ μ¬μ©ν©λλ€. λλ°μ΄μ±μ νΉμ λΉνμ± κΈ°κ° νμλ§ ν¨μκ° νΈμΆλλλ‘ λ³΄μ₯νκ³ , μ€λ‘νλ§μ ν¨μκ° νΈμΆλ μ μλ λΉμ¨μ μ νν©λλ€.
μμ: λ§μ°μ€λ₯Ό μμ§μΌ λλ§λ€ μμμ μμΉλ₯Ό μ λ°μ΄νΈνλ λμ , μ΄λ²€νΈ νΈλ€λ¬λ₯Ό λλ°μ΄μ±νμ¬ μ¬μ©μκ° λ§μ°μ€ μμ§μμ λ©μΆ νμλ§ μμΉλ₯Ό μ λ°μ΄νΈνλλ‘ ν©λλ€.
2.3.4. μ§μ° λ‘λ©(Lazy Loading)
μ§μ° λ‘λ©μ μ€μνμ§ μμ 리μμ€(μ: μ΄λ―Έμ§, λΉλμ€, μ€ν¬λ¦½νΈ)μ λ‘λ©μ νμν λκΉμ§ μ§μ°μν€λ κΈ°λ²μ λλ€. μ΄λ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ ν¬κ² ν₯μμν€κ³ 리μμ€ μλΉλ₯Ό μ€μΌ μ μμ΅λλ€.
- μ΄λ―Έμ§ μ§μ° λ‘λ©: μ΄λ―Έμ§κ° λ·°ν¬νΈμ 보μ΄κ² λ λλ§ λ‘λν©λλ€. `
` νκ·Έμ `loading="lazy"` μμ±μ μ¬μ©νκ±°λ μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ μ¬μ©μ μ μ μ§μ° λ‘λ© μ루μ μ ꡬνν©λλ€.
- μ€ν¬λ¦½νΈ μ§μ° λ‘λ©: μ€ν¬λ¦½νΈκ° νμν λλ§ λ‘λν©λλ€. `